package cn.maxhou.sz4;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map; /**
 * 实现了 Condition 接口，可以判断是否需要注册被标注的 Bean
 */
public class OnEnableCondition implements Condition {
    private static final Logger LOGGER = 
        LoggerFactory.getLogger(OnEnableCondition.class);
 
    @Override
    public boolean matches(ConditionContext context,
                           AnnotatedTypeMetadata metadata) {
        // 获取元数据中被标记的@ConditionOnPropertyEnable 注解的所有配置值
        Map<String, Object> attrs = metadata.getAnnotationAttributes(
            ConditionOnPropertyEnable.class.getName());
 
        // 获取到注解定义的 enableProperty 的值
        String enableProperty = (String)attrs.get("enableProperty");
        LOGGER.info("当前读取到属性名称: enableProperty = {}", 
                    enableProperty);
 
        // 从环境中获取 properties 文件对应配置的属性值
        String propertyValue = context.getEnvironment()
                                      .getProperty(enableProperty);
        LOGGER.info("从配置文件中获取属性值: {} = {}", 
                    enableProperty, propertyValue);
 
        // 是否需要注册
        Boolean needRegister = Boolean.valueOf(propertyValue);
        LOGGER.info("标注的 Bean 是否需要注册: {}", needRegister);
 
        // 返回 boolean 值，如果为 true，则会创建 bean 对象
        return needRegister;
    }
}
